home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 6 / The Arsenal Files 6 (Arsenal Computer).ISO / prg_basi / ddfedit.zip / DDFFIELD.FRM < prev    next >
Text File  |  1996-02-05  |  15KB  |  575 lines

  1. VERSION 2.00
  2. Begin Form FormFieldDDF 
  3.    BackColor       =   &H00C0C0C0&
  4.    Caption         =   "Fields For"
  5.    ClientHeight    =   3390
  6.    ClientLeft      =   1485
  7.    ClientTop       =   2610
  8.    ClientWidth     =   5475
  9.    Height          =   3795
  10.    Left            =   1425
  11.    LinkTopic       =   "Form1"
  12.    MDIChild        =   -1  'True
  13.    ScaleHeight     =   3390
  14.    ScaleWidth      =   5475
  15.    Top             =   2265
  16.    Width           =   5595
  17.    Begin CommandButton FldCom 
  18.       Caption         =   "&Down"
  19.       Height          =   255
  20.       Index           =   4
  21.       Left            =   3000
  22.       TabIndex        =   13
  23.       Top             =   0
  24.       Width           =   735
  25.    End
  26.    Begin SSPanel PanTop 
  27.       Align           =   1  'Align Top
  28.       AutoSize        =   3  'AutoSize Child To Panel
  29.       BevelOuter      =   0  'None
  30.       BorderWidth     =   1
  31.       Height          =   495
  32.       Left            =   0
  33.       TabIndex        =   7
  34.       Top             =   0
  35.       Width           =   5475
  36.       Begin CommandButton FldCom 
  37.          Caption         =   "&Delete"
  38.          Height          =   255
  39.          Index           =   2
  40.          Left            =   1440
  41.          TabIndex        =   14
  42.          Top             =   0
  43.          Width           =   735
  44.       End
  45.       Begin CommandButton FldCom 
  46.          Caption         =   "&Up"
  47.          Height          =   255
  48.          Index           =   3
  49.          Left            =   2280
  50.          TabIndex        =   12
  51.          Top             =   0
  52.          Width           =   735
  53.       End
  54.       Begin CommandButton FldCom 
  55.          Caption         =   "&Edit"
  56.          Height          =   255
  57.          Index           =   1
  58.          Left            =   720
  59.          TabIndex        =   11
  60.          Top             =   0
  61.          Width           =   735
  62.       End
  63.       Begin CommandButton FldCom 
  64.          Caption         =   "&New"
  65.          Height          =   255
  66.          Index           =   0
  67.          Left            =   0
  68.          TabIndex        =   10
  69.          Top             =   0
  70.          Width           =   735
  71.       End
  72.       Begin SSPanel PanHead 
  73.          AutoSize        =   3  'AutoSize Child To Panel
  74.          BevelInner      =   1  'Inset
  75.          BevelOuter      =   0  'None
  76.          BorderWidth     =   1
  77.          Height          =   255
  78.          Left            =   0
  79.          TabIndex        =   8
  80.          Top             =   240
  81.          Width           =   5475
  82.          Begin TextBox TextTop 
  83.             BackColor       =   &H00C0C0C0&
  84.             BorderStyle     =   0  'None
  85.             Enabled         =   0   'False
  86.             ForeColor       =   &H00FF0000&
  87.             Height          =   195
  88.             Left            =   30
  89.             MultiLine       =   -1  'True
  90.             TabIndex        =   9
  91.             Text            =   "test test test"
  92.             Top             =   30
  93.             Width           =   5415
  94.          End
  95.       End
  96.    End
  97.    Begin TextBox XPath 
  98.       Height          =   285
  99.       Left            =   0
  100.       TabIndex        =   6
  101.       Top             =   2280
  102.       Visible         =   0   'False
  103.       Width           =   180
  104.    End
  105.    Begin TextBox XFDFlags 
  106.       Height          =   285
  107.       Left            =   960
  108.       TabIndex        =   5
  109.       Top             =   2280
  110.       Visible         =   0   'False
  111.       Width           =   180
  112.    End
  113.    Begin TextBox XFDLocation 
  114.       Height          =   285
  115.       Left            =   720
  116.       TabIndex        =   4
  117.       Top             =   2280
  118.       Visible         =   0   'False
  119.       Width           =   180
  120.    End
  121.    Begin TextBox XFDName 
  122.       Height          =   285
  123.       Left            =   480
  124.       TabIndex        =   3
  125.       Top             =   2280
  126.       Visible         =   0   'False
  127.       Width           =   180
  128.    End
  129.    Begin TextBox XFDid 
  130.       Height          =   285
  131.       Left            =   240
  132.       TabIndex        =   2
  133.       Top             =   2280
  134.       Visible         =   0   'False
  135.       Width           =   180
  136.    End
  137.    Begin SSPanel PanList 
  138.       AutoSize        =   3  'AutoSize Child To Panel
  139.       BevelInner      =   1  'Inset
  140.       BevelOuter      =   0  'None
  141.       BorderWidth     =   1
  142.       Height          =   1650
  143.       Left            =   0
  144.       TabIndex        =   0
  145.       Top             =   1320
  146.       Width           =   4815
  147.       Begin ListBox Llist 
  148.          Height          =   1590
  149.          Left            =   30
  150.          TabIndex        =   1
  151.          Top             =   30
  152.          Width           =   4755
  153.       End
  154.    End
  155. End
  156. Option Explicit
  157. Dim CurrentOffset As Integer
  158. Dim inited As Integer
  159. Dim Local_File_Changed As Integer
  160. Dim FieldArr() As XDField_def
  161. Dim FieldLast As Integer
  162. Dim CurrListIndex As Integer
  163.  
  164. Sub Arrfill ()
  165.   Dim Keybuf As KeyBufDef
  166.   Dim KeyBufLen As Integer
  167.   Dim XDField As XDField_def
  168.   Dim BufLen As Integer
  169.   Dim stat As Integer
  170.   Dim PosBlk As PosBlkDef
  171.   Dim FileFullPath As String
  172.   Dim X As Integer
  173.   Dim XDFieldKey1 As XDFieldKey1_def
  174.   Dim i As Integer
  175.   Dim j As Integer
  176.   Dim p1 As Integer
  177.   Dim p2 As Integer
  178.  
  179.   Debug.Print "listfill"
  180.   
  181.   llist.Clear
  182.  
  183.   KeyBufLen = Len(Keybuf)
  184.   BufLen = Len(XDField)
  185.  
  186.   ' first open the file
  187.   FileFullPath = XPath & "Field.DDF"
  188.   Keybuf.kb = FileFullPath
  189.   KeyBufLen = Len(Keybuf)
  190.   BufLen = 0
  191.   
  192.   stat = btrcall(B_OPEN, PosBlk, XDField, BufLen, Keybuf, KeyBufLen, 0)
  193.   If stat <> 0 Then
  194.     MsgBox "Btrieve Error Opening file " & FileFullPath & Chr(10) & stat & " " & BtErr(stat)
  195.     Exit Sub
  196.   End If
  197.  
  198.  
  199.   KeyBufLen = Len(XDFieldKey1): BufLen = Len(XDField)
  200.   XDFieldKey1.XeDFile = Val(XFDid.Text)
  201.   stat = btrcall(B_GETGE, PosBlk, XDField, BufLen, XDFieldKey1, KeyBufLen, 1)
  202.   
  203.   CurrentOffset = 0
  204.   FieldLast = 0
  205.   Do
  206.     If stat <> 0 Then Exit Do
  207.     
  208.     If XDField.XeDFile <> Val(XFDid.Text) Then Exit Do
  209.  
  210.     CurrListIndex = 0
  211.     ReDim Preserve FieldArr(FieldLast)
  212.     FieldArr(FieldLast) = XDField
  213.     FieldLast = FieldLast + 1
  214.    
  215.     KeyBufLen = Len(XDFieldKey1): BufLen = Len(XDField)
  216.     stat = btrcall(B_GETNX, PosBlk, XDField, BufLen, XDFieldKey1, KeyBufLen, 1)
  217.   
  218.   Loop
  219.  
  220.   If (stat <> 9 And stat <> 0) Then MsgBox "Btrieve Error Retrieving Record in FILE file " & Chr(10) & stat & " " & BtErr(stat)
  221.   stat = btrcall(B_CLOSE, PosBlk, XDField, BufLen, Keybuf, KeyBufLen, 0)
  222.  
  223. End Sub
  224.  
  225. Sub FieldDelete ()
  226.   Dim CurIdx As Integer
  227.   
  228.   CurIdx = llist.ListIndex
  229.  
  230.   If CurIdx = -1 Then Exit Sub
  231.  
  232.   
  233.   If IsFieldInIndexes(FieldArr(CurIdx).XeDid) Then
  234.     MsgBox "Field is used in Indexes and cannot be changed", , "ERROR"
  235.     Exit Sub
  236.   End If
  237.  
  238.   
  239.   llist.RemoveItem CurIdx
  240.   
  241.  
  242.   If CurIdx > llist.ListCount - 1 Then
  243.     CurrListIndex = llist.ListCount - 1
  244.   Else
  245.     CurrListIndex = CurIdx
  246.   End If
  247.  
  248.   ListExtract
  249.   ListAdjust
  250.   listfill
  251.   Local_File_Changed = True
  252.  
  253.  
  254.  
  255. End Sub
  256.  
  257. Sub FieldEdit ()
  258.   Dim fIdx As Integer
  259.   fIdx = llist.ListIndex
  260.   If fIdx = -1 Then Exit Sub
  261.   
  262.   If IsFieldInIndexes(FieldArr(fIdx).XeDid) Then
  263.     MsgBox "Field is used in Indexes and cannot be changed", , "ERROR"
  264.     Exit Sub
  265.   End If
  266.   
  267.   
  268.   Curr_file_Changed = Local_File_Changed
  269.   
  270.   
  271.   Load FormNewField
  272.   FormNewField.NewFieldName.Text = FieldArr(fIdx).XeDName
  273.   FormNewField.NewFieldDataType.Text = Format(Asc(FieldArr(fIdx).XeDDataType), "0")
  274.   FormNewField.NewFieldSize = Format(FieldArr(fIdx).XeDSize, "0")
  275.   FormNewField.NewFieldDec = Format(Asc(FieldArr(fIdx).XedDec), "0")
  276.   
  277.   FormNewField.XFDid.Text = Trim(XFDid.Text)
  278.   FormNewField.XPath.Text = Trim(XPath.Text)
  279.   FormNewField.FieldIdx = fIdx
  280.   FormNewField.Show 1
  281.   Local_File_Changed = Curr_file_Changed
  282.   If Local_File_Changed Then
  283.     ListExtract
  284.     ListAdjust
  285.     CurrListIndex = FieldLast - 1
  286.     listfill
  287.   End If
  288.  
  289.  
  290. End Sub
  291.  
  292. Sub FieldMove (WhichWay As Integer)
  293.   Dim CurIdx As Integer, NewIdx As Integer
  294.   Dim i As Integer
  295.   Dim TempArr As XDField_def
  296.   
  297.   CurIdx = llist.ListIndex
  298.  
  299.   If CurIdx = -1 Then Exit Sub
  300.  
  301.   NewIdx = CurIdx + WhichWay
  302.   If NewIdx < 0 Then Exit Sub
  303.   If NewIdx > llist.ListCount - 1 Then Exit Sub
  304.  
  305.   TempArr = FieldArr(NewIdx)
  306.   FieldArr(NewIdx) = FieldArr(CurIdx)
  307.   FieldArr(CurIdx) = TempArr
  308.  
  309.   ListAdjust
  310.   CurrListIndex = NewIdx
  311.   listfill
  312.   Local_File_Changed = True
  313.  
  314.  
  315.  
  316. End Sub
  317.  
  318. Sub FieldNew ()
  319.   Curr_file_Changed = Local_File_Changed
  320.   Load FormNewField
  321.   
  322.   FormNewField.XFDid.Text = XFDid.Text
  323.   FormNewField.XPath.Text = XPath.Text
  324.   FormNewField.FieldIdx = -1
  325.   FormNewField.Show 1
  326.   Local_File_Changed = Curr_file_Changed
  327.   If Local_File_Changed Then
  328.     ListExtract
  329.     ListAdjust
  330.     CurrListIndex = FieldLast - 1
  331.     listfill
  332.   End If
  333.  
  334. End Sub
  335.  
  336. Sub Fields_Add ()
  337.   ' Add all Fields to the current file XeDid
  338.   ' XPath & Field.ddf
  339.  
  340.   Dim stat As Integer
  341.   Dim KeyNum As Integer
  342.   Dim PosBlk As PosBlkDef
  343.   Dim Keybuf As KeyBufDef
  344.   Dim KeyBufLen As Integer
  345.   Dim BufLen As Integer
  346.   Dim FileFullPath As String
  347.   Dim XDField As XDField_def
  348.   Dim i As Integer, r As Integer
  349.  
  350. ' ************************************************************************************
  351. ' Now we add records to the FIELD.DDF file
  352. ' ************************************************************************************
  353.  
  354.   FileFullPath = XPath.Text & "FIELD.DDF"
  355.   Keybuf.kb = FileFullPath
  356.   KeyBufLen = Len(Keybuf)
  357.   BufLen = 0
  358.   
  359.   status "Adding Fields to file " & FileFullPath
  360.   
  361.   stat = btrcall(B_OPEN, PosBlk, XDField, BufLen, Keybuf, KeyBufLen, 0)
  362.   If stat <> 0 Then
  363.     MsgBox "Btrieve Error Opening file " & FileFullPath & Chr(10) & stat & " " & BtErr(stat)
  364.     Exit Sub
  365.   End If
  366.  
  367.   ' Records for FILE.DDF
  368.  
  369.   For i = 0 To FieldLast - 1
  370.     r = AddRecordToFieldDDF(PosBlk, (Val(XFDid.Text)), (FieldArr(i).XeDName), (Asc(FieldArr(i).XeDDataType)), (FieldArr(i).XeDOffset), (FieldArr(i).XeDSize), (Asc(FieldArr(i).XedDec)), 0)
  371.   Next i
  372.  
  373.   stat = btrcall(B_CLOSE, PosBlk, XDField, BufLen, Keybuf, KeyBufLen, 0)
  374.   
  375.  
  376. End Sub
  377.  
  378. Sub FldCom_Click (Index As Integer)
  379.   Select Case Index
  380.     Case 0: FieldNew 'new field
  381.     Case 1: FieldEdit ' edit field
  382.     Case 2: FieldDelete ' delete field
  383.     Case 3: FieldMove (-1)' Move Field Up
  384.     Case 4: FieldMove (1) ' Move Field Down
  385.  
  386.   End Select
  387. End Sub
  388.  
  389. Sub Form_Activate ()
  390.   Debug.Print "Activated"
  391.   If inited Then Exit Sub
  392.   Me.Caption = "Fields for """ & Trim(XfDName.Text) & """ (" & Trim(XFDLocation.Text) & ")"
  393.   If Val(XFDFlags.Text) = 16 Then
  394.     FldCom(0).Enabled = False
  395.     FldCom(1).Enabled = False
  396.     FldCom(2).Enabled = False
  397.     FldCom(3).Enabled = False
  398.     FldCom(4).Enabled = False
  399.   End If
  400.   Arrfill
  401.   listfill
  402.   If inited = False Then inited = True
  403.  
  404. End Sub
  405.  
  406. Sub Form_Load ()
  407.   
  408.   CurrListIndex = -1
  409.   Local_File_Changed = False
  410.   
  411.   inited = False
  412. End Sub
  413.  
  414. Sub Form_Resize ()
  415.   If windowstate = 1 Then Exit Sub
  416.   PanHead.Left = 0
  417.   PanHead.Width = PanTop.Width
  418.   PanList.Left = 0
  419.   PanList.Width = ScaleWidth
  420.   PanList.Top = PanTop.Height
  421.   PanList.Height = ScaleHeight - PanList.Top
  422. End Sub
  423.  
  424. Sub Form_Unload (Cancel As Integer)
  425.   Dim r As Integer
  426.   If Local_File_Changed Then
  427.     r = MsgBox("Changes Made : Do you wish to save Changes ?", 3 + 32, "Fields Changed")
  428.     Select Case r
  429.       Case 2
  430.         Cancel = True
  431.       Case 6
  432.         Fields_Remove (XPath.Text), (Val(XFDid.Text))
  433.         Fields_Add
  434.     End Select
  435.   End If
  436. End Sub
  437.  
  438. Function IsFieldInIndexes (FieldId As Integer)
  439.   
  440.   Dim Keybuf As KeyBufDef
  441.   Dim KeyBufLen As Integer
  442.   Dim XDIndex As XDIndex_def
  443.   Dim BufLen As Integer
  444.   Dim stat As Integer
  445.   Dim PosBlk As PosBlkDef
  446.   Dim FileFullPath As String
  447.   Dim XDIndexKey0 As XDIndexKey0_def
  448.   Dim Found As Integer
  449.   
  450.   
  451.   KeyBufLen = Len(Keybuf)
  452.   BufLen = Len(XDIndex)
  453.  
  454.   
  455.   FileFullPath = XPath & "Index.DDF"
  456.   Keybuf.kb = FileFullPath
  457.   KeyBufLen = Len(Keybuf)
  458.   BufLen = 0
  459.   
  460.   stat = btrcall(B_OPEN, PosBlk, XDIndex, BufLen, Keybuf, KeyBufLen, 0)
  461.   If stat <> 0 Then
  462.     MsgBox "Btrieve Error Opening file " & FileFullPath & Chr(10) & stat & " " & BtErr(stat)
  463.     Exit Function
  464.   End If
  465.  
  466.  
  467.   KeyBufLen = Len(XDIndexKey0): BufLen = Len(XDIndex)
  468.   XDIndexKey0.XiDFile = Val(XFDid.Text)
  469.   stat = btrcall(B_GETGE, PosBlk, XDIndex, BufLen, XDIndexKey0, KeyBufLen, 0)
  470.   
  471.   
  472.   Found = False
  473.   Do
  474.     If stat <> 0 Then Exit Do
  475.     If XDIndex.XiDFile <> Val(XFDid.Text) Then Exit Do
  476.     If XDIndex.XidField = FieldId Then
  477.       Found = True
  478.       Exit Do
  479.     End If
  480.  
  481.     KeyBufLen = Len(XDIndexKey0): BufLen = Len(XDIndex)
  482.     stat = btrcall(B_GETNX, PosBlk, XDIndex, BufLen, XDIndexKey0, KeyBufLen, 0)
  483.   
  484.   Loop
  485.  
  486.   If (stat <> 9 And stat <> 0) Then MsgBox "Btrieve Error Retrieving Record in FILE file " & Chr(10) & stat & " " & BtErr(stat)
  487.   stat = btrcall(B_CLOSE, PosBlk, XDIndex, BufLen, Keybuf, KeyBufLen, 0)
  488.   
  489.   IsFieldInIndexes = Found
  490.  
  491.  
  492. End Function
  493.  
  494. Sub ListAdjust ()
  495.   Dim i As Integer
  496.   Dim NewOff As Integer
  497.  
  498.   NewOff = 0
  499.   For i = 0 To FieldLast - 1
  500.     FieldArr(i).XeDid = i + 1
  501.     FieldArr(i).XeDFile = Val(XFDid.Text)
  502.     FieldArr(i).XeDOffset = NewOff
  503.     NewOff = NewOff + FieldArr(i).XeDSize
  504.   Next i
  505.  
  506.   CurrentOffset = NewOff
  507. End Sub
  508.  
  509. Sub ListExtract ()
  510.   Dim i As Integer
  511.   Dim ll As String
  512.   Dim p1 As Integer, p2 As Integer
  513.   Dim NewOff As Integer
  514.  
  515.   
  516. ' first extract values from list into array
  517.  
  518.   FieldLast = llist.ListCount
  519.   For i = 0 To FieldLast - 1
  520.     ReDim Preserve FieldArr(i)
  521.     ll = llist.List(i)
  522.  
  523.     FieldArr(i).XeDid = -1 ' Will need to be recalculated starting from last
  524.     FieldArr(i).XeDFile = Val(XFDid.Text) ' the ID of the file
  525.  
  526.  
  527. ' XDField.XeDName
  528.     p1 = 1: p2 = InStr(p1, ll, Chr(9))
  529.     FieldArr(i).XeDName = Mid(ll, p1, p2 - p1)
  530.     
  531. ' Format(Asc(XDField.XeDDataType), "0")
  532.     p1 = p2 + 1: p2 = InStr(p1, ll, Chr(9))
  533.     FieldArr(i).XeDDataType = Chr(Val(Mid(ll, p1, p2 - p1)))
  534.     
  535. ' XDField.XeDOffset
  536.     p1 = p2 + 1: p2 = InStr(p1, ll, Chr(9))
  537.     FieldArr(i).XeDOffset = Val(Mid(ll, p1, p2 - p1))
  538.  
  539. ' XDField.XeDSize
  540.     p1 = p2 + 1: p2 = InStr(p1, ll, Chr(9))
  541.     FieldArr(i).XeDSize = Val(Mid(ll, p1, p2 - p1))
  542.  
  543. ' Format(Asc(XDField.XeDDec), "0")
  544.     p1 = p2 + 1: p2 = InStr(p1, ll, Chr(9))
  545.     FieldArr(i).XedDec = Chr(Val(Mid(ll, p1, p2 - p1)))
  546.  
  547. ' XDField.XeDFlags
  548.     p1 = p2 + 1
  549.     FieldArr(i).XeDFlags = Val(Mid(ll, p1))
  550.   Next i
  551.  
  552.   
  553.   ' Now readjust the offset and the field numbers
  554.  
  555.  
  556. End Sub
  557.  
  558. Sub listfill ()
  559.   Dim i As Integer
  560.  
  561.   llist.Clear
  562.  
  563.   Texttop.Text = "Name" & Chr(9) & "DataType" & Chr(9) & "Offset" & Chr(9) & "Size" & Chr(9) & "Dec" & Chr(9) & "Flags"
  564.   
  565.   For i = 0 To FieldLast - 1
  566.     llist.AddItem FieldArr(i).XeDName & Chr(9) & Format(Asc(FieldArr(i).XeDDataType), "0") & Chr(9) & FieldArr(i).XeDOffset & Chr(9) & FieldArr(i).XeDSize & Chr(9) & Format(Asc(FieldArr(i).XedDec), "0") & Chr(9) & Format(FieldArr(i).XeDFlags, "0")
  567.     llist.ItemData(llist.NewIndex) = FieldArr(i).XeDid
  568.   Next i
  569.   llist.ListIndex = CurrListIndex
  570.  
  571.   i = AutoSetTabStopsCheck(llist, Texttop, False, False)
  572.  
  573. End Sub
  574.  
  575.